package QianFeng11.Introspector;
/**
 * 内省
 * 内省(Introspector)是Java语言对Bean类属性、事件的一种缺省处理方法。
 * 例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。
 * 通过getName/setName来访问name属性，这就是默认的规则。
 *
 * Java中提供了一套API用来访问某个属性的getter/setter方法r通过这些API可以使你不需要了
 * 解这个规则，这些API存放于包java.beans中，一般的做法是通过类Introspector的
 * getBeanInfo方法来获取某个对象的BeanInfo信息，然后通过BeanInfo来获取属性的描述器
 * (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法，
 * 然后我们就可以通过反射机制来调用这些方法。
 *
 * Introspector相关API
 * 1、Introspector类:
 * Introspector类为通过工具学习有关受目标Java Bean支持的属性、事件和方法的知识提供了一个标准方法。
 * static Be anInfo getBeanInfo(Class<?> beanClass)
 *      在Java Bean.上进行内省，了解其所有属性、公开的方法和事件。
 * 2、BeanInfo类:
 * 该类实现此BeanInfo接口并提供有关其bean的方法、属性、事件等显式信息。
 * MethodDescriptor[] getMethodDescriptors()
 *      获得beans MethodDescriptor。
 * PropertyDescriptor[] getPropertyDescriptors()
 *      获得beans PropertyDescriptor。
 * Properties  属性文件工具类的使用.
 * 3、PropertyDescriptor 类:
 * PropertyDescriptor        描述Java Bean通过一对存 储器方法导出的一个属性。
 * Method getReadMethod()    获得应该用于读取属性值的方法。
 * Method getWriteMethod()   获得应该用于写入属性值的方法。
 * 4、MethodDescriptor 类:
 * MethodDescriptor    描述了一种特殊方法，即JavaBean支持从其他组件对其进行外部访问。
 * Method getMethod()  获得此MethodDescriptor封装的方法。
 **/
public class BeanTest {

    public static void main(String[] args) {
        Config bean = (Config) BeanFactory.getBean("bean.name");
        System.out.println(bean);

    }
}
